using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._Distance._Legacy
{
    /// <summary>
    /// <para>Cost Connectivity</para>
    /// <para>Produces the least-cost connectivity network between two or more input regions.</para>
    /// <para>在两个或多个输入区域之间生成成本最低的连接网络。</para>
    /// </summary>    
    [DisplayName("Cost Connectivity")]
    public class CostConnectivity : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CostConnectivity()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_regions">
        /// <para>Input raster or feature region data</para>
        /// <para><xdoc>
        ///   <para>The input regions that are to be connected by the least-cost network.</para>
        ///   <para>Regions can be defined by either a raster or a feature dataset.</para>
        ///   <para>If the region input is a raster, the regions are defined by groups of contiguous (adjacent) cells of the same value. Each region must be uniquely numbered. The cells that are not part of any region must be NoData. The raster type must be integer, and the values can be either positive or negative.</para>
        ///   <para>If the region input is a feature dataset, it can be either polygons, lines, or points. Polygon feature regions cannot be composed of multipart polygons.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要通过成本最低的网络连接的输入区域。</para>
        ///   <para>区域可以由栅格数据集或要素数据集定义。</para>
        ///   <para>如果区域输入为栅格，则区域由相同值的连续（相邻）像元组定义。每个区域必须具有唯一编号。不属于任何区域的单元格必须是 NoData。栅格类型必须为整数，并且值可以是正数或负数。</para>
        ///   <para>如果区域输入是要素数据集，则可以是面、线或点。面要素区域不能由多部分面组成。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_cost_raster">
        /// <para>Input cost raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the impedance or cost to move planimetrically through each cell.</para>
        ///   <para>The value at each cell location represents the cost-per-unit distance for moving through the cell. Each cell location value is multiplied by the cell resolution while also compensating for diagonal movement to obtain the total cost of passing through the cell.</para>
        ///   <para>The values of the cost raster can be integer or floating point, but they cannot be negative or zero (you cannot have a negative or zero cost).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义在每个像元中平面移动的阻抗或成本的栅格。</para>
        ///   <para>每个像元位置的值表示在像元中移动的单位距离成本。每个像元位置值乘以像元分辨率，同时还补偿对角线移动，以获得通过像元的总成本。</para>
        ///   <para>成本栅格的值可以是整数或浮点，但不能为负数或零（不能为负数或零成本）。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output feature class</para>
        /// <para><xdoc>
        ///   <para>The output polyline feature class of the optimum (least-cost) network of paths necessary to connect each of the input regions.</para>
        ///   <para>Each path (or line) is uniquely numbered, and additional fields in the attribute table store specific information about the path. Those fields include the following:</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID—Unique identifier for the path</bullet_item><para/>
        ///     <bullet_item>PATHCOST—Total accumulative cost for the path</bullet_item><para/>
        ///     <bullet_item>REGION1—The first region the path connects</bullet_item><para/>
        ///     <bullet_item>REGION2—The other region the path connects</bullet_item><para/>
        ///   </bulletList>
        ///   <para>This information provides you insight into the paths within the network.</para>
        ///   <para>Since each path is represented by a unique line, there will be multiple lines in locations where paths travel the same route.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>连接每个输入区域所需的最佳（最低成本）路径网络的输出折线要素类。</para>
        ///   <para>每条路径（或线）都有唯一的编号，属性表中的其他字段存储有关路径的特定信息。这些字段包括：</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID - 路径的唯一标识符</bullet_item><para/>
        ///     <bullet_item>PATHCOST—路径的总累积成本</bullet_item><para/>
        ///     <bullet_item>REGION1 - 路径连接的第一个区域</bullet_item><para/>
        ///     <bullet_item>REGION2 - 路径连接的其他区域</bullet_item><para/>
        ///   </bulletList>
        ///   <para>通过此信息，您可以深入了解网络内的路径。</para>
        ///   <para>由于每条路径都由一条唯一的线表示，因此在路径沿同一路线行驶的位置将有多条线。</para>
        /// </xdoc></para>
        /// </param>
        public CostConnectivity(object _in_regions, object _in_cost_raster, object _out_feature_class)
        {
            this._in_regions = _in_regions;
            this._in_cost_raster = _in_cost_raster;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Cost Connectivity";

        public override string CallName => "sa.CostConnectivity";

        public override List<string> AcceptEnvironments => ["MDomain", "MResolution", "MTolerance", "XYDomain", "XYResolution", "XYTolerance", "ZDomain", "ZResolution", "ZTolerance", "autoCommit", "cellSize", "cellSizeProjectionMethod", "configKeyword", "extent", "geographicTransformations", "maintainSpatialIndex", "mask", "outputCoordinateSystem", "outputMFlag", "outputZFlag", "outputZValue", "scratchWorkspace", "snapRaster", "workspace"];

        public override object[] ParameterInfo => [_in_regions, _in_cost_raster, _out_feature_class, _out_neighbor_paths];

        /// <summary>
        /// <para>Input raster or feature region data</para>
        /// <para><xdoc>
        ///   <para>The input regions that are to be connected by the least-cost network.</para>
        ///   <para>Regions can be defined by either a raster or a feature dataset.</para>
        ///   <para>If the region input is a raster, the regions are defined by groups of contiguous (adjacent) cells of the same value. Each region must be uniquely numbered. The cells that are not part of any region must be NoData. The raster type must be integer, and the values can be either positive or negative.</para>
        ///   <para>If the region input is a feature dataset, it can be either polygons, lines, or points. Polygon feature regions cannot be composed of multipart polygons.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要通过成本最低的网络连接的输入区域。</para>
        ///   <para>区域可以由栅格数据集或要素数据集定义。</para>
        ///   <para>如果区域输入为栅格，则区域由相同值的连续（相邻）像元组定义。每个区域必须具有唯一编号。不属于任何区域的单元格必须是 NoData。栅格类型必须为整数，并且值可以是正数或负数。</para>
        ///   <para>如果区域输入是要素数据集，则可以是面、线或点。面要素区域不能由多部分面组成。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input raster or feature region data")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_regions { get; set; }


        /// <summary>
        /// <para>Input cost raster</para>
        /// <para><xdoc>
        ///   <para>A raster defining the impedance or cost to move planimetrically through each cell.</para>
        ///   <para>The value at each cell location represents the cost-per-unit distance for moving through the cell. Each cell location value is multiplied by the cell resolution while also compensating for diagonal movement to obtain the total cost of passing through the cell.</para>
        ///   <para>The values of the cost raster can be integer or floating point, but they cannot be negative or zero (you cannot have a negative or zero cost).</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>定义在每个像元中平面移动的阻抗或成本的栅格。</para>
        ///   <para>每个像元位置的值表示在像元中移动的单位距离成本。每个像元位置值乘以像元分辨率，同时还补偿对角线移动，以获得通过像元的总成本。</para>
        ///   <para>成本栅格的值可以是整数或浮点，但不能为负数或零（不能为负数或零成本）。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input cost raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_cost_raster { get; set; }


        /// <summary>
        /// <para>Output feature class</para>
        /// <para><xdoc>
        ///   <para>The output polyline feature class of the optimum (least-cost) network of paths necessary to connect each of the input regions.</para>
        ///   <para>Each path (or line) is uniquely numbered, and additional fields in the attribute table store specific information about the path. Those fields include the following:</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID—Unique identifier for the path</bullet_item><para/>
        ///     <bullet_item>PATHCOST—Total accumulative cost for the path</bullet_item><para/>
        ///     <bullet_item>REGION1—The first region the path connects</bullet_item><para/>
        ///     <bullet_item>REGION2—The other region the path connects</bullet_item><para/>
        ///   </bulletList>
        ///   <para>This information provides you insight into the paths within the network.</para>
        ///   <para>Since each path is represented by a unique line, there will be multiple lines in locations where paths travel the same route.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>连接每个输入区域所需的最佳（最低成本）路径网络的输出折线要素类。</para>
        ///   <para>每条路径（或线）都有唯一的编号，属性表中的其他字段存储有关路径的特定信息。这些字段包括：</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID - 路径的唯一标识符</bullet_item><para/>
        ///     <bullet_item>PATHCOST—路径的总累积成本</bullet_item><para/>
        ///     <bullet_item>REGION1 - 路径连接的第一个区域</bullet_item><para/>
        ///     <bullet_item>REGION2 - 路径连接的其他区域</bullet_item><para/>
        ///   </bulletList>
        ///   <para>通过此信息，您可以深入了解网络内的路径。</para>
        ///   <para>由于每条路径都由一条唯一的线表示，因此在路径沿同一路线行驶的位置将有多条线。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output feature class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Output feature class of neighboring connections</para>
        /// <para><xdoc>
        ///   <para>The output polyline feature class identifying all paths from each region to each of its closest-cost neighbors.</para>
        ///   <para>Each path (or line) is uniquely numbered, and additional fields in the attribute table store specific information about the path. Those fields include the following:</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID—Unique identifier for the path</bullet_item><para/>
        ///     <bullet_item>PATHCOST—Total accumulative cost for the path</bullet_item><para/>
        ///     <bullet_item>REGION1—The first region the path connects</bullet_item><para/>
        ///     <bullet_item>REGION2—The other region the path connects</bullet_item><para/>
        ///   </bulletList>
        ///   <para>This information provides you insight into the paths within the network and is particularly useful when deciding which paths should be removed if necessary.</para>
        ///   <para>Since each path is represented by a unique line, there will be multiple lines in locations where paths travel the same route.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出折线要素类，用于标识从每个区域到其每个成本最接近的邻居的所有路径。</para>
        ///   <para>每条路径（或线）都有唯一的编号，属性表中的其他字段存储有关路径的特定信息。这些字段包括：</para>
        ///   <bulletList>
        ///     <bullet_item>PATHID - 路径的唯一标识符</bullet_item><para/>
        ///     <bullet_item>PATHCOST—路径的总累积成本</bullet_item><para/>
        ///     <bullet_item>REGION1 - 路径连接的第一个区域</bullet_item><para/>
        ///     <bullet_item>REGION2 - 路径连接的其他区域</bullet_item><para/>
        ///   </bulletList>
        ///   <para>通过此信息，您可以深入了解网络中的路径，并且在决定在必要时应删除哪些路径时特别有用。</para>
        ///   <para>由于每条路径都由一条唯一的线表示，因此在路径沿同一路线行驶的位置将有多条线。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output feature class of neighboring connections")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_neighbor_paths { get; set; } = null;


        public CostConnectivity SetEnv(object MDomain = null, object MResolution = null, object MTolerance = null, object XYDomain = null, object XYResolution = null, object XYTolerance = null, object ZDomain = null, object ZResolution = null, object ZTolerance = null, int? autoCommit = null, object cellSize = null, object configKeyword = null, object extent = null, object geographicTransformations = null, bool? maintainSpatialIndex = null, object mask = null, object outputCoordinateSystem = null, object outputMFlag = null, object outputZFlag = null, object outputZValue = null, object scratchWorkspace = null, object snapRaster = null, object workspace = null)
        {
            base.SetEnv(MDomain: MDomain, MResolution: MResolution, MTolerance: MTolerance, XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, ZDomain: ZDomain, ZResolution: ZResolution, ZTolerance: ZTolerance, autoCommit: autoCommit, cellSize: cellSize, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, maintainSpatialIndex: maintainSpatialIndex, mask: mask, outputCoordinateSystem: outputCoordinateSystem, outputMFlag: outputMFlag, outputZFlag: outputZFlag, outputZValue: outputZValue, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, workspace: workspace);
            return this;
        }

    }

}